/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain.regulacion;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.domain.MessageModalWindowController;
import co.gov.medellin.sdep.sisdep.domain.SolicitudBaseController;
import co.gov.medellin.sdep.sisdep.gestion.exception.SolicitudException;
import co.gov.medellin.sdep.sisdep.model.SolicitudNuevo;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudModificaException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudNuevoException;
import co.gov.medellin.sdep.sisdep.regulacion.exception.SolicitudNuevoRuntimeException;
import co.gov.medellin.sdep.sisdep.regulacion.service.ISolicitudNuevoService;

/**
 * @author Usuario
 * 
 */
public class SolicitudNuevoController extends SolicitudBaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public SolicitudNuevoController() {
		cleanSearchValues();
		cleanValues();
	}

	/** bean para el manejo del formulario de busqueda SolicitudNuevo */
	private SolicitudNuevo solicitudNuevoSearch = new SolicitudNuevo();

	/** Objeto contenedor del listado de SolicitudNuevo luego de una consulta. */
	private DataModel solicitudNuevoListModel;

	/** bean para el manejo del formulario de creacion/edicion. SolicitudNuevo */
	private SolicitudNuevo solicitudNuevo = new SolicitudNuevo();

	/** instancia de servicio solicitudNuevoService */
	private ISolicitudNuevoService solicitudNuevoService;

	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	/**
	 * 
	 * @return String
	 * @throws SolicitudException 
	 * @throws SolicitudModificaException 
	 */
	public void init(Long solicitudId) throws SolicitudException, SolicitudNuevoException {
		cleanSearchValues();
		this.solicitud = getSolicitudService().get(solicitudId.longValue());
		this.solicitudNuevo = getSolicitudNuevoService().getSolicitudNuevoRelatedBy(solicitudId.longValue());
		if(this.solicitudNuevo == null){
			this.solicitudNuevo = new SolicitudNuevo();
			cleanValues();
			this.solicitudNuevo.setIdSolicitud(solicitudId);
		}
	}
	
	/**
	 * 
	 * @return String
	 */
	public String searchSolicitudNuevoByKey() {
		String msg = "";
		try {
			List valores = null;
			valores = getSolicitudNuevoService().load(1, 10,
					this.solicitudNuevoSearch);
			this.solicitudNuevoListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.solicitudNuevoListModel.getWrappedData() == null) {
			if(msg.equals("")){
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		} else {
			if (((List) this.solicitudNuevoListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		return AppConstants.SOLICITUD_NUEVO_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.solicitudNuevo.getId().longValue() == 0L) {
				getSolicitudNuevoService().insert(this.solicitudNuevo);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (SolicitudNuevoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (SolicitudNuevoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Solicitud Nuevo Comerciante Informal " + msg, null, null);
		return "";
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.solicitudNuevo.getId().longValue() != 0L) {
				getSolicitudNuevoService().update(this.solicitudNuevo);
				msg = AppConstants.SUCCESS_UPDATE;
			}
			if (this.solicitudNuevo.getId().longValue() == 0L) {
				getSolicitudNuevoService().insert(this.solicitudNuevo);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (SolicitudNuevoException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (SolicitudNuevoRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Solicitud Nuevo Comerciante Informal " + msg, null, null);
		return "";
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public String createSolicitudNuevo() {
		solicitudNuevo = new SolicitudNuevo();
		cleanValues();
		return AppConstants.SOLICITUD_NUEVO_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateSolicitudNuevo() {
		Map params = getExternalContext().getRequestParameterMap();
		String solicitudNuevoDataIndex = (String) params
				.get("solicitudNuevoDataIndex");
		this.solicitudNuevo = (SolicitudNuevo) ((List) this.solicitudNuevoListModel
				.getWrappedData())
				.get(Integer.parseInt(solicitudNuevoDataIndex));
		cleanSearchValues();
		return AppConstants.SOLICITUD_NUEVO_UPDATE_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelSolicitudNuevo() {
		cleanSearchValues();
		return AppConstants.SOLICITUD_SEARCH_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelSolicitudNuevoOpcion() {
		cleanValues();
		cleanSearchValues();
		return AppConstants.SOLICITUD_NUEVO_SEARCH_VIEW;
	}

	/**
	 * limpia el contenido de los valores que se ingresan para buscar
	 */
	public final void cleanSearchValues() {
		solicitudNuevoSearch.setEstado("");
	}

	/**
	 * limpia el contenido de los valores que se ingresan (Create, Update)
	 */
	public final void cleanValues() {
		solicitudNuevo.setId(new Long(0L));
		solicitudNuevo.setIdIndicadorUbicacion("");
		solicitudNuevo.setIdTipoVenta(new Long(0L));
		solicitudNuevo.setIdClaseVenta(new Long(0L));
		solicitudNuevo.setIdTipoAmoblamiento(new Long(0L));
		solicitudNuevo.setHorario("");
		solicitudNuevo.setEstado("");
		this.solicitudNuevoListModel = new ListDataModel();
	}

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public SolicitudNuevo getSolicitudNuevoSearch() {
		return solicitudNuevoSearch;
	}

	/**
	 * 
	 * @param solicitudNuevoSearch
	 */
	public void setsolicitudNuevoSearch(SolicitudNuevo solicitudNuevoSearch) {
		this.solicitudNuevoSearch = solicitudNuevoSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel getsolicitudNuevoListModel() {
		return solicitudNuevoListModel;
	}

	/**
	 * 
	 * @param solicitudNuevoListModel
	 */
	public void setsolicitudNuevoListModel(DataModel solicitudNuevoListModel) {
		this.solicitudNuevoListModel = solicitudNuevoListModel;
	}

	/**
	 * 
	 * @return
	 */
	public SolicitudNuevo getSolicitudNuevo() {
		if(getSessionObject("SOLICITUD_ID") != null){
			Long idSolicitud = (Long) getSessionObject("SOLICITUD_ID");
			SolicitudNuevo local = null;
			if(idSolicitud != null){
				/** verificamos si se tiene detalle para la solicitud */
				try {
					local = getSolicitudNuevoService().getSolicitudNuevoRelatedBy(idSolicitud.longValue());
					if(local != null){
						solicitudNuevo = local;
					}else{
						solicitudNuevo.setIdSolicitud(idSolicitud);
					}
				} catch (SolicitudNuevoException e) {
					e.printStackTrace();
				}
			}
		}
		return solicitudNuevo;
	}

	/**
	 * 
	 * @param solicitudNuevo
	 */
	public void setsolicitudNuevo(SolicitudNuevo solicitudNuevo) {
		this.solicitudNuevo = solicitudNuevo;
	}

	/**
	 * obtencion del servicio solicitudNuevoService
	 * 
	 * @return
	 */
	public ISolicitudNuevoService getSolicitudNuevoService() {
		return solicitudNuevoService;
	}

	/**
	 * establecimiento del servicio solicitudNuevoService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param solicitudNuevoService
	 */
	public void setSolicitudNuevoService(
			ISolicitudNuevoService solicitudNuevoService) {
		this.solicitudNuevoService = solicitudNuevoService;
	}

	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

}
